module.exports = {
	/**
	 * 修改数据
	 * @url admin/datas/kh/update 前端调用的url参数地址
	 * data 请求参数 说明
	 * res 返回参数说明
	 * @params {Number} code 错误码，0表示成功
	 * @params {String} msg 详细信息
	 */
	main: async (event) => {
		const db = uniCloud.database();
		let { data = {}, userInfo, util, filterResponse, originalParam } = event;
		let { customUtil, uniID, config, pubFun, vk, _ } = util;
		let { uid } = data;
		let res = { code: 0, msg: 'ok' };
		// 业务逻辑开始-----------------------------------------------------------
		// 获取前端传过来的参数
		let {
			_id,
			date,
			date_time,
			drxh,
			drcz,
			jrroi, //今日ROI，实际上是3日ROI
			srroi, //首日roi
			qrroi, //七日ROI
			gzcb,
			xyhffcb,
			xyhffupz,
			xyhffl,
			xyhs,
			xyhczje,
			xyhczrs,
			xyhczbs,
			drczrs,
			drczbs,
			hcbs,
			hcje,
			agent_id,
			agent_username,
			_add_time_str,
			_add_time
		} = data;
		// 参数验证开始
		if (vk.pubfn.isNull(_id)) return { code: -1, msg: 'id不能为空' };

		//==========查询并计算3日ROI开始==========
		//查询3日前的一天带来的用户的充值总金额，比如今日9.4，则计算9.2日新增的用户，在9.2，9.3,9.4这三天来累计充了多少钱
		//date_time是这条数据记录的日期的0点，比如9.4号的数据，记录的就是9.4日0点0分0秒,往前倒2天就是9.2号。
		let old_time = await vk.pubfn.getDayOffsetStartAndEnd(-2, date_time)
		//三日累计充值金额
		res.srljcz = await vk.baseDao.sum({
			dbName: "a_recharge",
			fieldName: "shifu_amount", // 需要求和的字段名
			whereJson: {
				invite_code: userInfo._id,
				pay_status: 1,
				user_register_date: _.and(_.gt(old_time.startTime), _.lt(old_time.endTime))
			}
		});

		//先获取三天前的消耗值
		let get_drxh = await db.collection('a_datas').where({
			type: 1, //取账号级数据，而不是平台总数据
			agent_id: userInfo._id,
			date_time: old_time.startTime,
		}).get()

		//判断是否存在数据，不存在则直接跳过
		if (get_drxh.data.length > 0) {
			let sr_drxh = get_drxh.data[0].drxh || 0
			//必须大于0，否则计算中会有无穷大的值产生
			if (sr_drxh > 0) {
				// 今日roi ==》3日roi  3天前的一天带来的用户累计充值/今天的消耗
				//特别注意，三日充值金额单位是分，当日消耗金额是元，所以需要/100
				jrroi = vk.pubfn.toDecimal(res.srljcz / 100 / sr_drxh, 2)

				//三日roi的值，应该存到3天前的数据中。比如9.4，算出来的三日roi应该存到9.1的数据中
				let update_srroi = await db.collection('a_datas').where({
					type: 1,
					agent_id: userInfo._id,
					date_time: old_time.startTime,
				}).update({
					srljcz: vk.pubfn.toDecimal(res.srljcz / 100, 2), //三日累计充值金额
					jrroi: jrroi
				})
			}
			//==========查询并计算3日ROI结束==========
		}

		//==========查询并计算7日ROI开始==========
		//查询7日前的一天带来的用户的充值总金额，比如今日9.7，则计算9.1日新增的用户，在9.1,9.2,9.3,9,4,9.5,9.6,9.7这7天来累计充了多少钱
		//date_time是这条数据记录的日期的0点，比如9.7号的数据，记录的就是9.7日0点0分0秒,往前倒6天就是9.1号。
		let old_time_7days = await vk.pubfn.getDayOffsetStartAndEnd(-6, date_time)
		//7日累计充值金额
		res.qrljcz = await vk.baseDao.sum({
			dbName: "a_recharge",
			fieldName: "shifu_amount", // 需要求和的字段名
			whereJson: {
				invite_code: userInfo._id,
				pay_status: 1,
				user_register_date: _.and(_.gt(old_time_7days.startTime), _.lt(old_time_7days.endTime))
			}
		});

		//先获取7天前那一天的消耗值
		let get_drxh_7days = await db.collection('a_datas').where({
			type: 1, //取账号级数据，而不是平台总数据
			agent_id: userInfo._id,
			date_time: old_time_7days.startTime,
		}).get()

		//判断是否存在数据，不存在则直接跳过
		if (get_drxh_7days.data.length > 0) {
			let qr_drxh = get_drxh_7days.data[0].drxh || 0
			//必须大于0，否则计算中会有无穷大的值产生
			if (qr_drxh > 0) {
				//七日roi = qrroi
				//特别注意，7日充值金额单位是分，当日消耗金额是元，所以需要/100
				qrroi = vk.pubfn.toDecimal(res.qrljcz / 100 / qr_drxh, 2)
				//7日累计充值金额
				let qrljcz = vk.pubfn.toDecimal(res.qrljcz / 100, 2)
				//三日roi的值，应该存到3天前的数据中。比如9.4，算出来的三日roi应该存到9.1的数据中
				let update_qrroi = await db.collection('a_datas').where({
					type: 1,
					agent_id: userInfo._id,
					date_time: old_time_7days.startTime,
				}).update({
					qrljcz: qrljcz,
					qrroi: qrroi //七日ROI
				})
			}
			//==========查询并计算7日ROI结束==========
		}

		//首日roi  首日新用户充值/首日消耗
		srroi = vk.pubfn.toDecimal(xyhczje / drxh, 2)

		//新用户付费成本
		xyhffcb = vk.pubfn.toDecimal(drxh / xyhs, 2)

		// 参数验证结束
		let dbName = "a_datas"; // 表名
		// 执行 数据库 updateById 命令
		await vk.baseDao.updateById({
			dbName,
			id: _id,
			dataJson: {
				date,
				drxh,
				drcz,
				// jrroi,由于3日roi生成的是三天前的数据，所以这里不做修改
				srroi,
				gzcb,
				xyhffcb,
				xyhffupz,
				xyhffl,
				xyhs,
				xyhczje,
				xyhczrs,
				xyhczbs,
				drczrs,
				drczbs,
				hcbs,
				hcje,
				agent_id,
				agent_username,
				_add_time_str,
				_add_time
			}
		});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	}

}
